﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Gustozzi.DAL;
using Gustozzi.BL;
namespace WebGustozzi.ModuloVentas
{

    ///<summary>
    ///Nombre	    : wfActualizarPromocion
    ///Descripción	: 
    ///               
    ///</summary>
    ///<remarks>
    ///Fecha        Moficado Por        Descripción
    ///10/02/2012               	    Versión inicial
    ///23/02/2012   Marco Pizarro	    Agregar validaciones iniciales
    ///</remarks>
    public partial class wfActualizarPromocion : System.Web.UI.Page
    {
        VentasDataEntities contexto=null;
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                inicializar();
            }
        }

        public void inicializar()
        {
            txtFechaInicio.Attributes.Add("onblur", String.Format("FechaValida('{0}','{1}','{2}')", txtFechaInicio.ClientID, "Promoción", "Ingrese una Fecha de Inicio válido"));
            txtFechaFin.Attributes.Add("onblur", String.Format("FechaValida('{0}','{1}','{2}')", txtFechaFin.ClientID, "Promocion", "Ingrese una Fecha Fin válido"));

            EditarControles(false);
        }

        protected void imbCerrar_Click(object sender, ImageClickEventArgs e)
        {
            Response.Redirect("../wfPrincipal.aspx");
        }

        protected void txtCodigoPromo_TextChanged(object sender, EventArgs e)
        {
            try
            {
                BuscarPromocion();
            }
            catch (Exception ex)
            {
                lblMsj.Text = ex.Message;
                lblMsj.ForeColor = System.Drawing.Color.Red;
                divMensaje.Visible = true;
            }
        }

        public void BuscarPromocion() 
        {
            if (contexto == null) 
            {
                contexto = new VentasDataEntities();
            }

            if (txtCodigoPromo.Text.Trim().Equals(string.Empty)) 
            {
                LimpiarFormulario();
                return;
            }

            int idPromocion = Convert.ToInt32(txtCodigoPromo.Text.Trim());

            var listado = from v in contexto.Promociones
                          where v.codigoPromocion == idPromocion
                          select v;

            if (listado.Count() > 0)
            {
                Promocion oPromocion = listado.First();
                txtCodigoCamp.Text = oPromocion.codigoCampana.ToString();
                txtNombrePromo.Text = oPromocion.nombre;
                BuscarCampaña();
                txtDescripcion.Text = oPromocion.descripcion;
                txtPrecioTotal.Text = oPromocion.precioTotal.ToString();
                rblTipo.SelectedValue = oPromocion.estado;
                txtFechaInicio.Text = oPromocion.fechaInicioVigencia.ToShortDateString();
                txtFechaFin.Text = oPromocion.fechaInicioVigencia.ToShortDateString();
            }
            else 
            {
                LimpiarFormulario();
                return;
            }
        }

        public void BuscarCampaña() 
        {
            if (contexto == null) 
            {
                contexto = new VentasDataEntities();
            }

            if (txtCodigoCamp.Text.Trim().Equals(string.Empty)) 
            {
                LimpiarFormularioCampaña();
                return;
            }

            int idCamp = Convert.ToInt32(txtCodigoCamp.Text.Trim());

            var listado = from v in contexto.Campañas
                          where v.codigoCampana == idCamp
                          select v;

            if (listado.Count() > 0)
            {
                Campaña oCamp = listado.First();
                txtNombreCampaña.Text = oCamp.nombre;
                txtIniCamp.Text = oCamp.fechaInicioVigencia.Value.ToShortDateString();
                txtFinCamp.Text = oCamp.fechaFinalVigencia.Value.ToShortDateString();
            }
            else
            {
                LimpiarFormularioCampaña();
                return;
            }
        }

        public void LimpiarFormulario() 
        {
            txtCodigoPromo.Text = string.Empty;
            txtCodigoCamp.Text = string.Empty;
            txtNombrePromo.Text = string.Empty;
            txtDescripcion.Text = string.Empty;
            txtPrecioTotal.Text = string.Empty;
            rblTipo.SelectedIndex = 0;
            txtFechaInicio.Text = string.Empty;
            txtFechaFin.Text = string.Empty;
        }

        public void LimpiarFormularioCampaña() 
        {
            txtNombreCampaña.Text = string.Empty;
            txtIniCamp.Text = string.Empty;
            txtFinCamp.Text = string.Empty;
        }

        public void EditarControles(Boolean estado)
        {
            this.txtCodigoPromo.Enabled = estado;
            this.txtCodigoCamp.Enabled = estado;
            this.txtNombrePromo.Enabled = estado;
            this.imbBuscarCampaña.Visible = estado;
            this.txtFechaInicio.Enabled = estado;
            this.txtFechaFin.Enabled = estado;
            this.btnDetalleProductos.Enabled = estado;
            this.txtPrecioTotal.Enabled = estado;
            this.imbFechaFin.Visible = estado;
            this.imbFechaInicio.Visible = estado;
            this.rblTipo.Enabled = estado;
            this.imbBuscarPromocion.Visible = !estado;
        }

        protected void txtCodigoCamp_TextChanged(object sender, EventArgs e)
        {
            try
            {
                BuscarCampaña();
            }
            catch (Exception ex)
            {
                lblMsj.Text = ex.Message;
                lblMsj.ForeColor = System.Drawing.Color.Red;
                divMensaje.Visible = true;
            }
        }

        protected void imbGuardar_Click(object sender, EventArgs e)
        {
            try
            {
                Guardar();
            }
            catch (Exception ex)
            {
                lblMsj.Text = ex.Message;
                lblMsj.ForeColor = System.Drawing.Color.Red;
                divMensaje.Visible = true;
            }
        }

        public void Guardar()
        {
            if (contexto == null) 
            {
                contexto = new VentasDataEntities();
            }

            if(txtCodigoPromo.Text.Trim().Equals(String.Empty))
            {
                throw new Exception("Ingrese un codigo para la promocion");
            }

            if (this.txtNombrePromo.Text.Trim().Equals(String.Empty))
            {
                throw new Exception("Seleccione nombre de promoción.");
            }
            
            if (txtCodigoCamp.Text.Trim().Equals(String.Empty))
            {
                throw new Exception("Seleccione campaña");
            }

            if (this.txtDescripcion.Text.Trim().Equals(String.Empty))
            {
                throw new Exception("Ingrese una descripción para la promoción.");
            }

            if (this.txtFechaInicio.Text.Trim().Equals(String.Empty))
            {
                throw new Exception("Seleccione la fecha de inicio para el periodo de la promoción.");
            }

            if (this.txtFechaFin.Text.Trim().Equals(String.Empty))
            {
                throw new Exception("Seleccione la fecha de fin para el periodo de la promoción.");
            }

            var rptListado = Session["listaProductos"];
            if (rptListado == null)
            {
                throw new Exception("Debe registrar al menos un producto.");
            }
            else 
            {
                List<PromocionItem> lstProductos = (List<PromocionItem>)rptListado;
                if (lstProductos.Count() <= 0)
                {
                    throw new Exception("Debe registrar al menos un producto.");
                }
            }
            // agregar validacion HABLA....

            if (this.txtPrecioTotal.Text.Trim().Equals(String.Empty))
            {
                throw new Exception("Ingrese el precio total de la promoción.");
            }

            int idPromocion = Convert.ToInt32(txtCodigoPromo.Text.Trim());

            var lstPromocion = from p in contexto.Promociones
                               where p.codigoPromocion == idPromocion
                               select p;
            
            Promocion oPromocion =null;
            
            if (lstPromocion.Count() > 0)
            {
                oPromocion= lstPromocion.First();
            }
            else 
            {
                oPromocion = new Promocion();
                contexto.AddToPromociones(oPromocion);
            }

            int idCampana = Convert.ToInt32(txtCodigoCamp.Text.Trim());

            oPromocion.codigoPromocion = idPromocion;
            oPromocion.codigoCampana = idCampana;
            oPromocion.descripcion = txtDescripcion.Text;
            oPromocion.nombre = txtNombrePromo.Text;
            oPromocion.estado = rblTipo.SelectedValue;
            oPromocion.precioTotal = Convert.ToDouble (txtPrecioTotal.Text);
            oPromocion.fechaInicioVigencia = Convert.ToDateTime(txtFechaInicio.Text);
            oPromocion.fechaFinalVigencia = Convert.ToDateTime(txtFechaFin.Text);
            MarketingBL oMarketingBL = new MarketingBL();
           int rpt= oMarketingBL.ActualizarPromocion(oPromocion, contexto);
           if (rpt > 0)
           {
               lblMsj.Text = "Se guardo satisfactoriamente la promoción.";
               lblMsj.ForeColor = System.Drawing.Color.Blue;
               EditarControles(false);
               divControlesManten.Visible = true;
               divRegistrar.Visible = false;
               divMensaje.Visible = true;
           } else 
           {
               lblMsj.Text = "Se produjo un error al intentar guardar, cierre y vuelva a intentarlo.";
               lblMsj.ForeColor = System.Drawing.Color.Red;
               divMensaje.Visible = true;
           }
        }

        protected void imbNuevo_Click(object sender, ImageClickEventArgs e)
        {
            try
            {
                if (contexto == null)
                {
                    contexto = new VentasDataEntities();
                }
                var oListado = from p in contexto.Promociones
                               select p.codigoPromocion;
                int idPromo = 1;

                if (oListado.Count() > 0)
                {
                    idPromo = oListado.Max();
                    idPromo += 1;
                }
                LimpiarFormularioCampaña();
                LimpiarFormulario();
                txtCodigoPromo.Text = idPromo.ToString();

                EditarControles(true);
                this.rblTipo.SelectedIndex = 0;
                this.rblTipo.Enabled = false;
                divControlesManten.Visible = false;
                divRegistrar.Visible = true;
                divMensaje.Visible = false;
            }
            catch (Exception ex)
            {
                lblMsj.Text = ex.Message;
                lblMsj.ForeColor = System.Drawing.Color.Red;
                divMensaje.Visible = true;
            }
        }

        protected void imbCancelar_Click(object sender, ImageClickEventArgs e)
        {
            EditarControles(false);
            LimpiarFormularioCampaña();
            LimpiarFormulario();
            divControlesManten.Visible = true;
            divRegistrar.Visible = false;
            divMensaje.Visible = false;
        }

        protected void imbCerrar1_Click(object sender, ImageClickEventArgs e)
        {
            Response.Redirect("../wfPrincipal.aspx");
        }

        protected void imbModificar_Click(object sender, ImageClickEventArgs e)
        {
            if (String.IsNullOrEmpty(this.txtCodigoPromo.Text.Trim()))
            {
                lblMsj.Text = "Seleccione la promoción a modificar.";
                lblMsj.ForeColor = System.Drawing.Color.Red;
                divMensaje.Visible = true;                
            } else {          
                EditarControles(true);
                this.txtCodigoPromo.Enabled = false;
                divControlesManten.Visible = false;
                divRegistrar.Visible = true;
                divMensaje.Visible = false;
            }
        }

        protected void imbEliminar_Click(object sender, ImageClickEventArgs e)
        {
            lblMsj.Text = "En Construcción....";
            lblMsj.ForeColor = System.Drawing.Color.Green;
            divMensaje.Visible = true;
        }
       
    }
}